1608. Число-палиндром

 

Проверьте, является ли заданное число палиндромом.

Число называется палиндромом, если оно читается одинаково слева направо и справа налево.

 

Вход. Одно неотрицательное целое 32-битное число.

 

Выход. Выведите Yes, если число является палиндромом, и No в противном случае.

 

Пример входа

Пример выхода

121

Yes

 

 

РЕШЕНИЕ

строки

 

Анализ алгоритма

Прочитаем входное число как строку в символьный массив s. Пусть len – длина строки s, уменьшенная на 1 (индекс последнего символа массива). Строка является палиндромом, если для всех 0 ≤ ilen / 2 выполняется условие s[i] = s[leni].

Рассмотрим, например, число 4570754 длины 7. Тогда len = 7 – 1 = 6. Имеют место следующие равенства:

·        s[0] = s[6 – 0] = s[6] = ‘4’;

·        s[1] = s[6 – 1] = s[5] = ‘5’;

·        s[2] = s[6 – 2] = s[4] = ‘7’;

 

Реализация алгоритма

Входное число храним в символьном массиве s.

 

char s[50];

 

Читаем входное число как строку. Устанавливаем len равным индексу последней цифры.

 

gets(s);

len = strlen(s) - 1;

 

Инициализируем flag = 0, означающее что число является палиндромом.

 

flag = 0;

 

Если для некоторого i нарушается равенство s[i] = s[leni], то число не является палиндромом, и устанавливаем flag = 1.

 

for (i = 0; i <= len / 2; i++)

  if (s[i] != s[len - i]) flag = 1;

 

В зависимости от значения переменной flag выводим результат.

 

if (flag == 0) printf("Yes\n"); else printf("No\n");

 

Реализация алгоритма – функция IsPalindrome

Входное число храним в символьном массиве s.

 

char s[50];

 

Функция IsPalindrome проверяет, является ли строка s палиндромом.

 

int IsPalindrome(char *s)

{

  int i = 0, j = strlen(s) - 1;

  while(i < j)

  {

    if (s[i] != s[j]) return 0;

    i++; j--;

  }

  return 1;

}

 

Основная часть программы. Читаем входное число как строку.

 

gets(s);

 

Проверяем, является ли строка s палиндромом.

 

flag = IsPalindrome(s);

 

В зависимости от значения переменной flag выводим результат.

 

if (flag == 1) printf("Yes\n"); else printf("No\n");

 

Реализация алгоритма – STL reverse

Читаем входное число как строку p.

 

cin >> p;

 

Обращаем строку p: q = reverse(p).

 

q = p; reverse(q.begin(),q.end());

 

Если строки p и q одинаковы, то входная строка является палиндромом.

 

if (p == q) printf("Yes\n"); else printf("No\n");

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    char[] s = con.nextLine().toCharArray();

    int flag = 0, len = s.length - 1;

    for(int i = 0; i < len - i; i++)

      if (s[i] != s[len - i]) flag = 1;

 

    if (flag == 0)

      System.out.println("Yes");

    else

      System.out.println("No");   

    con.close();

  }

}

 

Java реализация – функция IsPalindrome

 

import java.util.*;

 

public class Main

{

  public static int IsPalindrome(String s)

  {

    int i = 0, j = s.length() - 1;

    while(i < j)

    {

      if (s.charAt(i) != s.charAt(j)) return 0;

      i++; j--;

    }

    return 1;

  }

 

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    String s = con.next();

   

    int flag = IsPalindrome(s);

 

    if (flag == 1)

      System.out.println("Yes");

    else

      System.out.println("No");

    con.close();

  }

}

 

Python реализация

Читаем входное число как строку.

 

a = input()

 

Реверс строки a можно получить при помощи среза: a[::-1]. Проверяем, совпадает ли строка a со своим реверсом. В зависимости от результата выводим соответствующий ответ.

 

if a == a[::-1]:

  print("Yes")

else:

  print("No")